﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BusinessLogic;
using System.Text.RegularExpressions;

namespace thdescritorio
{
    public partial class frmEditar : Form
    {
        private long numUsuario;
        public frmEditar(long nroUsuario)//nroUsuario: número de funcionario del usuario que se va a editar.
        {
            InitializeComponent();
            numUsuario = nroUsuario;
        }

        private void frmEditar_Load(object sender, EventArgs e)
        {
            //Cargar datos del usuario
            //lblNro.Text = numUsuario.ToString();
            if (numUsuario != 0)
            {
                Persona unaP = Sistema.getInstancia().getFuncEspecificoByNro(numUsuario);
                lblNro.Text = unaP.NroFuncionario.ToString();
                txtNombre.Text = unaP.Nombre;
                txtApellido.Text = unaP.Apellido;
                txtTel.Text = unaP.Telefono;
                txtInterno.Text = unaP.Interno;
                txtMail.Text = unaP.Mail;
                txtSeccion.Text = unaP.Seccion;
                lblTipo.Text = (unaP.GetType().ToString()).Remove(0, 14);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Cambiar la contraseña al número de funcionario.
            //Se restablece la contraseña por defecto ( admin ).
            Persona unaPer = Sistema.getInstancia().getFuncEspecificoByNro(numUsuario);
            unaPer.Contrasenia = "admin";
            unaPer.update();
            //Le devuelve el foco al formulario frmGestion.
            frmGestion.ActiveForm.Activate();
            //Se cierra el form.
            this.Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            //Si los datos ingresados son correctos...
            if (validarForm())
            {
                //Se obtiene el funcionario por su numero y se le asignan sus
                //atributos segun los valores del formulario.
                Persona unaPer = Sistema.getInstancia().getFuncEspecificoByNro(numUsuario);
                unaPer.Nombre = txtNombre.Text;
                unaPer.Apellido = txtApellido.Text;
                unaPer.Telefono = txtTel.Text;
                unaPer.Interno = txtInterno.Text;
                unaPer.Mail = txtMail.Text;
                unaPer.Seccion = txtSeccion.Text;
                //Se actualizan los datos del funcionario.
                unaPer.update();
                //Le devuelve el foco al formulario frmGestion.
                frmGestion.ActiveForm.Activate();
                //Se cierra el form.
                this.Close();
            }
        }
        public bool validarForm()
        {
            bool val = false;
            long nro;
            //Verifica que que se haya ingresado un nombre en un formato valido.
            nro = txtNombre.Text.Length;
            if (nro > 0 && nro < 30)
            {
                //Verifica que que se haya ingresado un apellido en un formato valido.
                nro = txtApellido.Text.Length;
                if (nro > 0 && nro < 30)
                {
                    //Verifica que que se haya ingresado un apellido en un formato valido.
                    nro = txtApellido.Text.Length;
                    if (nro > 0 && nro < 30)
                    {
                        //Verifica que que se haya ingresado un telefono en un formato valido.
                        nro = txtTel.Text.Length;
                        if (nro > 0 && nro < 30)
                        {
                            //Verifica que que se haya ingresado un interno en un formato valido.
                            nro = txtInterno.Text.Length;
                            if (nro > 0 && nro < 20)
                            {
                                //Verifica que que se haya ingresado un email en un formato valido.
                                nro = txtMail.Text.Length;
                                if (nro > 0 && nro < 50 && validarEmail(txtMail.Text))
                                {
                                    //Verifica que que se haya ingresado una seccion en un formato valido.
                                    nro = txtSeccion.Text.Length;
                                    if (nro > 0 && nro < 50)
                                    {
                                        val = true;

                                    }
                                    else
                                    {
                                        lblError.Text = "Ingrese el nombre de una seccion menor de 50 caracteres.";
                                    }
                                }
                                else
                                {
                                    lblError.Text = "Ingrese una direccion de email valida, que sea menor de 20 caracteres.";
                                }
                            }
                            else
                            {
                                lblError.Text = "Ingrese un interno menor de 20 caracteres.";
                            }
                        }
                        else
                        {
                            lblError.Text = "Ingrese un telefono menor de 30 caracteres.";
                        }
                    }
                    else
                    {
                        lblError.Text = "Ingrese un apellido menor de 30 caracteres.";
                    }
                }
                else
                {
                    lblError.Text = "Ingrese un apellido menor de 30 caracteres.";
                }
            }
            else
            {
                lblError.Text = "Ingrese un nombre menor de 30 caracteres.";
            }
            return val;
        }

        //Validar direcciones de correo electronico.
        private Boolean validarEmail(String pEmail)
        {
            String expresion;
            expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
            if (Regex.IsMatch(pEmail, expresion))
            {
                if (Regex.Replace(pEmail, expresion, String.Empty).Length == 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

        private void txtNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Nos aseguramos que solo se pueda ingresar texto por teclado en este campo.
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtApellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Nos aseguramos que solo se pueda ingresar texto por teclado en este campo.
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtTel_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Nos aseguramos que solo se puedan ingresar  numeros por teclado.
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else
                if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                    if (Char.IsSeparator(e.KeyChar))
                    {
                        e.Handled = false;
                    }
                    else
                    {
                        e.Handled = true;
                    }
        }

        private void txtInterno_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Nos aseguramos que solo se puedan ingresar  numeros por teclado.
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else
                if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                    if (Char.IsSeparator(e.KeyChar))
                    {
                        e.Handled = false;
                    }
                    else
                    {
                        e.Handled = true;
                    }
        }
    }
}
